home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / ddj0897.zip / DYN401.ZIP / class / intassoc.d < prev    next >
Text File  |  1996-03-27  |  2KB  |  124 lines

  1.  
  2. /*
  3.  *
  4.  *    Copyright (c) 1993-1996 Algorithms Corporation
  5.  *    3020 Liberty Hills Drive
  6.  *    Franklin, TN  37067
  7.  *
  8.  *    ALL RIGHTS RESERVED.
  9.  *
  10.  *
  11.  *
  12.  */
  13.  
  14.  
  15. #include <math.h>
  16.  
  17. defclass  IntegerAssociation : Association  {
  18.     int    iKey;
  19.     iValue;
  20. };
  21.  
  22. cmeth    gNewWithIntObj, <vNew> (int key, value)
  23. {
  24.     object    assoc;
  25.     ivType    *iv;
  26.  
  27.     ChkArgNul(value, 3);
  28.     assoc = gNew(super);
  29.     iv = ivPtr(assoc);
  30.     iKey = key;
  31.     iValue = value;
  32.     return assoc;
  33. }
  34.  
  35. imeth    gDeepCopy()
  36. {
  37.     object    nobj;
  38.  
  39.     nobj = gDeepCopy(super);
  40.     ivPtr(nobj)->iValue = iValue ? gDeepCopy(iValue) : NULL;
  41.     return nobj;
  42. }
  43.  
  44. imeth    gValue()
  45. {
  46.     return iValue;
  47. }
  48.  
  49. imeth    gChangeValue(value)
  50. {
  51.     object    ret;
  52.     ChkArgNul(value, 2);
  53.     ret = iValue;
  54.     iValue = value;
  55.     return ret;
  56. }
  57.  
  58. imeth    int    gIntKey()
  59. {
  60.     return iKey;
  61. }
  62.  
  63. imeth    gChangeIntKey(int key)
  64. {
  65.     iKey = key;
  66.     return self;
  67. }
  68.  
  69. imeth    object    gDeepDispose()
  70. {
  71.     if (iValue)
  72.         gDeepDispose(iValue);
  73.     return gDispose(super);
  74. }
  75.  
  76. imeth    gStringRepValue()
  77. {
  78.     object    s, t;
  79.  
  80.     t = iValue ? gStringRepValue(iValue) : gNewWithStr(String, "(null)");
  81.     s = vSprintf(String, "( %d, ", iKey);
  82.     vBuild(s, NULL, t, " )", NULL);
  83.     gDispose(t);
  84.     return s;
  85. }
  86.  
  87. imeth    int    gHash()
  88. {
  89.     double    t;
  90.  
  91.     t = .6125423371    * (unsigned) iKey;
  92.     t = t < 0.0 ? -t : t;
  93.     return (int) (BIG_INT * (t - floor(t)));
  94. }
  95.  
  96. imeth    int    gCompare(arg)
  97. {
  98.     int    sv, ov;
  99.  
  100.     ChkArg(arg, 2);
  101.     if ((sv=iKey) < (ov=gIntKey(arg)))
  102.         return -1;
  103.     else if (sv == ov)
  104.         return 0;
  105.     else
  106.         return 1;
  107. }
  108.  
  109.  
  110.  
  111.  
  112. /*
  113.  *
  114.  *    Copyright (c) 1993-1996 Algorithms Corporation
  115.  *    3020 Liberty Hills Drive
  116.  *    Franklin, TN  37067
  117.  *
  118.  *    ALL RIGHTS RESERVED.
  119.  *
  120.  *
  121.  *
  122.  */
  123.  
  124.